home *** CD-ROM | disk | FTP | other *** search
- Here is the format of object files generated by the macro assembler
- and Microsoft C Compiler.
-
- +---------------------------------------+
- | BYTE Record type |
- | 80 Module name |
- | 82 |
- | 84 |
- | 86 |
- | 88 |
- | 8A End of module |
- | 8C External symbols |
- | 8E |
- | 90 Public symbols |
- | 92 |
- | 94 Line number info |
- | 96 Segment/Group symbols |
- | 98 Info for specific seg |
- | 9A Info for specific group |
- | 9C Relocation list |
- | 9E |
- | A0 Segment data |
- | A2 Duplicated Segment Data |
- +---------------------------------------+
- | WORD Count of bytes in record, inc- |
- | luding the record checksum, but |
- | not including record type or |
- | byte count |
- +---------------------------------------+
- | .... Record Data .... |
- | See specific record for details |
- +---------------------------------------+
- | BYTE Checksum of all characters in |
- | record, including record type |
- +---------------------------------------+
-
-
- Now for each one of the record types. In the following descriptions,
- certain terminology will be used. Many of these record use a number
- which relates some particular field to a value. These numbers range
- from 1-255. In some cases, this number will relate an instantiation
- of a symbol to the name of the symbol. In other cases, this number
- will relate the segment or group instance with the actual segment or
- group of the instantiation.
-
- Module Name record (80) This record specifies the name of the module.
- The record data field will be filled in as follows:
- +---------------------------------------+
- | BYTE Length of Module name |
- +---------------------------------------+
- | (Length) BYTES Module Name |
- +---------------------------------------+
-
- End of Module record (8A)
- This record specifies the end of the module. The record data field
- will be filled with a zero byte
- +---------------------------------------+
- | BYTE Zero |
- +---------------------------------------+
-
-
- External Symbols Record (8C)
- This record specifies the names of the external symbols. The record
- data field is filled in as follows, and record data fields defining
- the symbols may appear more than once.
- +---------------------------------------+
- | BYTE Length of external symbol |
- +---------------------------------------+
- | (Length) BYTES External symbol name|
- +---------------------------------------+
- | BYTE Zero |
- +---------------------------------------+
-
- Public Symbols Record (90)
- This record defines the symbols declared as public symbols. Only one
- symbol will appear per record data field. The record data field is
- defined as follows:
- +---------------------------------------+
- | BYTE Zero |
- +---------------------------------------+
- | BYTE Segment number in which symbol |
- | is defined |
- +---------------------------------------+
- | BYTE Length of symbol |
- +---------------------------------------+
- | (Length) BYTES Public Symbol Name |
- +---------------------------------------+
- | WORD Offset where symbol defined |
- +---------------------------------------+
- | BYTE Zero |
- +---------------------------------------+
-
-
- Line Number Information Record (94)
- This record defines line number debugging information. This
- information is in the form of the line number of the source file, and
- the address at which the code corresponding to that line number
- starts. The record data field will be filled in as follows:
- +---------------------------------------+
- | BYTE Zero |
- +---------------------------------------+
- | BYTE Segment number |
- +---------------------------------------+
- | WORD Line number in source file |
- +---------------------------------------+
- | WORD Offset of start of line |
- +---------------------------------------+
-
- For this record, the last two field may be repeated any number of
- times.
-
-
- Segment/Group Symbols Record (96)
- This record defines the names of the symbols used in the module name,
- segment names, and group names. The segment symbol numbers the relate
- the segment numbers to this name. The record data field will be
- filled in as follows:
- +---------------------------------------+
- | BYTE Zero |
- +---------------------------------------+
- | BYTE Length of symbol name |
- +---------------------------------------+
- | (Length) BYTES Symbol Name |
- +---------------------------------------+
-
- The last two field may be repeated any number of times.
-
-
- Segment Specific Information Record (98)
- This record defines the combine and alignment classes of a specific
- segment. Segment numbers are assigned in the order in which these
- records may appear. The first occurrence of this record defines the
- first memory segment, and so on. The record data field will be filled
- in as follows:
- +---------------------------------------+
- | BYTE Combine/Alignment Class: |
- | is defined as 0AAXPS00 |
- | where AA is the alignment class |
- | 00=AT (Specific segment |
- | alignment) |
- | 01=BYTE boundary |
- | 10=WORD boundary |
- | 11=PARAGRAPH boundary |
- | X is unknown: used in stk |
- | P is a public segment |
- | S is a stack segment |
- +---------------------------------------+
- | WORD Segment size in bytes |
- +---------------------------------------+
- | BYTE Segment/Group Symbol Number |
- +---------------------------------------+
- | BYTE Not sure just yet. |
- +---------------------------------------+
- | BYTE Not sure just yet: usually 1 |
- +---------------------------------------+
-
-
- Group Specific Information Record (9A)
- This record defines the memory segments which will be contained in a
- group. The format of the record data field is defines as follows:
- +---------------------------------------+
- | BYTE Segment/Group Symbol Number |
- +---------------------------------------+
- | BYTE FF |
- +---------------------------------------+
- | BYTE Segment number |
- +---------------------------------------+
-
- The last two field will be repeated for every segment in a group.
-
-
- Relocation List Record (9C)
- This record defines the offsets in the just previously defined memory
- segment which need fixing up. Multiple fixups may occur in the data
- record field, and is defined as follows:
- +---------------------------------------+
- | BYTE Attributes needed/Relocation |
- | offset MSB and is defined as: |
- | 1A00SOFFF where |
- | A means absolute address needed |
- | S means segment number needed |
- | O means offset needed |
- | FFF is the 3 Least Significant |
- | bits of the MSB of fixup |
- | offset |
- +---------------------------------------+
- | BYTE LSB of fixup offset |
- +---------------------------------------+
- | BYTE Relocation type and is defined |
- | as 00LG0AE0 where |
- | L means length of symbol needed |
- | G means group override |
- | A means the address is needed |
- | E means the symbol is external |
- +---------------------------------------+
- | BYTE Group/Segment number. If Bit 4 |
- | of the previous byte was set, |
- | this will be a group number, |
- | otherwise it is segment number |
- +---------------------------------------+
- | BYTE Destination Segment Number |
- +---------------------------------------+
- | BYTE Source Symbol/Segment Number |
- +---------------------------------------+
- | WORD Destination offset if Relocation|
- | type byte is zero, otherwise |
- | nonexistant. |
- +---------------------------------------+
-
-
- Memory Segment Information Record (A0)
- This record defines the contents of a memory segment. One record
- for each segment will appear for each segment which has locations to
- be defined. For program code, this will be the actual code. For
- data, this will be the initial contents of the data. No memory
- segment record will exceed 1024 bytes, because of the relocation list
- which may follow. The format of the data record field is defined as
- follows:
- +---------------------------------------+
- | BYTE Memory segment number |
- +---------------------------------------+
- | WORD Origin in segment |
- +---------------------------------------+
- | ..... Data for Segment ..... |
- +---------------------------------------+
-
-
- Duplicate Memory Segment Information Record (A2)
- This record defines the contents of duplicated memory segment, such as
- when the assembler encounters a DUP in DB directive. The format of
- the data record field is defines as follows:
- +---------------------------------------+
- | BYTE Memory Segment Number |
- +---------------------------------------+
- | WORD Origin in Segment |
- +---------------------------------------+
- | WORD Number of Duplication times |
- +---------------------------------------+
- | WORD 1 |
- +---------------------------------------+
- | WORD 1 |
- +---------------------------------------+
- | WORD 0 |
- +---------------------------------------+
- | BYTE Length of DUP item |
- +---------------------------------------+
- | (Length) BYTES DUP data |
- +---------------------------------------+
- ▒S